package com.yuanqi.service;

import com.yuanqi.domain.RetailProduct;
import com.yuanqi.domain.ProductStatus;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 零售商品服务接口
 */
public interface RetailProductService {
    
    /**
     * 创建零售商品
     */
    RetailProduct createRetailProduct(RetailProduct retailProduct);
    
    /**
     * 更新零售商品
     */
    RetailProduct updateRetailProduct(RetailProduct retailProduct);
    
    /**
     * 根据ID查找零售商品
     */
    Optional<RetailProduct> findById(Long id);
    
    /**
     * 根据商品ID查找零售商品
     */
    Optional<RetailProduct> findByProductId(Long productId);
    
    
    /**
     * 查找所有零售商品
     */
    List<RetailProduct> findAll();
    
    /**
     * 分页查找零售商品
     */
    Page<RetailProduct> findAll(Pageable pageable);
    
    /**
     * 根据状态查找零售商品
     */
    List<RetailProduct> findByStatus(ProductStatus status);
    
    /**
     * 根据商品ID查找
     */
    List<RetailProduct> findByProductIdAndStatus(Long productId);
    
    /**
     * 查找低库存商品
     */
    List<RetailProduct> findLowStockProducts();
    
    /**
     * 查找缺货商品
     */
    List<RetailProduct> findOutOfStockProducts();
    
    /**
     * 调整商品库存
     */
    RetailProduct adjustStock(Long retailProductId, Integer quantity, String reason, String operatorName);
    
    /**
     * 更新商品状态
     */
    RetailProduct updateStatus(Long productId, ProductStatus status);
    
    /**
     * 删除零售商品
     */
    void deleteById(Long id);
    
    /**
     * 批量更新商品状态
     */
    void batchUpdateStatus(List<Long> productIds, ProductStatus status);
    
    /**
     * 获取商品统计信息
     */
    Object getProductStatistics();
    
    /**
     * 获取商品销售统计
     */
    Object getProductSalesStats(Long productId);
    
    /**
     * 获取商品库存变动记录
     */
    Object getProductInventoryHistory(Long productId);
    
    /**
     * 更新商品图片URL
     */
    void updateProductImageUrl(Long productId, String imageUrl);
}
